package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.*;
import com.itheima.service.EmpExprService;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;


@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper,Emp> implements EmpService {

    @Autowired
    private EmpExprService empExprService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveEmp(Emp emp) {
        //新增员工，首先完善员工信息
        emp.setPassword("123456");
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        this.save(emp);//调用了mybatisplus的save方法
        //接下来还需要同步新增员工的工作经历
        List<EmpExpr> exprList = emp.getExprList();
        if(exprList != null && exprList.size() > 0){
            for (EmpExpr empExpr : exprList) {
                empExpr.setEmpId(emp.getId());//将员工的id设置给工作经历表
            }
            empExprService.saveBatch(exprList);
        }

    }

    @Override
    public Emp getEmpById(Integer id) {
        //
        Emp emp = this.getById(id);//得到员工的基本数据
        if(emp == null){
            throw new RuntimeException("员工不存在");
        }
        //接下来完善员工工作经历信息，返回给前端
        //根据员工id查询工作经历
        //select * from emp_expr where emp_id = ?
        List<EmpExpr> list = empExprService.list(new LambdaQueryWrapper<EmpExpr>().eq(EmpExpr::getEmpId, emp.getId()));
        //将查询到的工作经历信息设置给员工对象
        emp.setExprList(list);
        return emp;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateEmp(Emp emp) {
        //修改员工信息，需要完善员工的基本信息
        emp.setUpdateTime(LocalDateTime.now());
        this.updateById(emp);
        //对于员工的工作经历信息，采用先删除，再新增的方式
        //目前我们知道员工id，删除经历表中所有的该员工id的记录
        //delete from emp_expr where emp_id = ?
        empExprService.remove(new LambdaUpdateWrapper<EmpExpr>().eq(EmpExpr::getEmpId, emp.getId()));
        //删除成功后，将新的工作记录，插入到emp_expr表中
        List<EmpExpr> exprList = emp.getExprList();
        if(exprList != null && exprList.size() > 0){
            for (EmpExpr empExpr : exprList) {
                empExpr.setEmpId(emp.getId());//将员工的id设置给工作经历表
            }
            empExprService.saveBatch(exprList);
        }
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteByids(List<Integer> ids) {
        //首先删除员工信息
        this.removeByIds(ids);
        //然后删除员工的工作经历
        //delete from emp_expr where emp_id in (?,?,?)
        empExprService.remove(new LambdaUpdateWrapper<EmpExpr>().in(EmpExpr::getEmpId, ids));
    }
}
